package com.fulihui.information.core.db;

import java.util.Map;
import java.util.Set;

/**
 * 咨询内容排序存储
 *
 * @author Willard Hu on 2017/1/11.
 */
public interface ContentSortDB {

    /**
     * 新增或者更新内容的评分
     *
     * @param contentId    内容主键
     * @param score        分数
     * @param categoryCode 类目代码
     * @return 操作成功的结果数
     */
    long save(String contentId, double score, String categoryCode);

    /**
     * 批量新增或者更新内容的评分
     *
     * @param params       Map集合，key是内容主键，value是内容评分
     * @param categoryCode 类目代码
     * @return 操作成功的结果数
     */
    long bathSave(Map<String, Double> params, String categoryCode);

    /**
     * 增量内容的评分，填写负数的话作为减量
     *
     * @param contendId    内容主键
     * @param num          分数增量值
     * @param categoryCode 类目代码
     * @return 更新后的分数
     */
    double incrScore(String contendId, double num, String categoryCode);

    /**
     * 通过分数从大到小排序中获取一个区间的数据
     *
     * @param start        区间起始索引位
     * @param end          区间结束索引位
     * @param categoryCode 类目代码
     * @return 区间中的内容id列表
     */
    Set<String> range(int start, int end, String categoryCode);

    /**
     * 通过分数区间获取数据
     *
     * @param min          最小分数
     * @param max          最大分数
     * @param categoryCode 类目代码
     * @return id集合
     */
    Set<String> rangeByScore(double min, double max, String categoryCode);

    /**
     * 通过分数区间获取数据的数量
     *
     * @param min          最小分数
     * @param max          最大分数
     * @param categoryCode 类目代码
     * @return 数量
     */
    long rangeByScoreCount(double min, double max, String categoryCode);

    /**
     * 获取排序存储的总数量
     *
     * @param categoryCode 类目代码
     * @return 数量
     */
    long size(String categoryCode);

    /**
     * 按内容主键删除
     *
     * @param ids          内容主键
     * @param categoryCode 类目代码
     * @return 操作成功的数量s
     */
    long remove(String categoryCode, String... ids);

    /**
     * 按区间删除数据
     *
     * @param start        区间起始索引位
     * @param end          区间结束索引位
     * @param categoryCode 类目代码
     * @return 操作成功的数量
     */
    long removeRange(int start, int end, String categoryCode);
}
